package com.ruoyi.system.service.impl;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.Act;
import com.ruoyi.system.dto.ActStatSearchDTO;
import com.ruoyi.system.mapper.ActMapper;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.vo.ActStatVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.ActStatMapper;
import com.ruoyi.system.domain.ActStat;
import com.ruoyi.system.service.IActStatService;
import com.ruoyi.common.core.text.Convert;

/**
 * 作品统计Service业务层处理
 *
 * @author xuyk
 * @date 2022-01-03
 */
@Service
public class ActStatServiceImpl implements IActStatService
{
    @Autowired
    private ActStatMapper actStatMapper;

    @Autowired
    private ActMapper actMapper;

    /**
     * 查询作品统计列表
     *
     * @param searchDTO 作品统计查询Dto
     * @return 作品统计
     */
    @Override
    public List<ActStatVO> selectActStatByCondition(ActStatSearchDTO searchDTO)
    {
        return actStatMapper.selectActStatByCondition(searchDTO);
    }


    /**
     * 查询作品统计
     *
     * @param id 作品统计唯一标识  gameId + "," + schoolId + "," + facultyId
     * @return 作品统计
     */
    @Override
    public ActStat selectActStatById(String id)
    {
        String[] arr = id.split(",");
        Long gameId = Long.parseLong(arr[0]);
        Long schoolId = Long.parseLong(arr[1]);
        Long facultyId = Long.parseLong(arr[2]);
        ActStat actStat = new ActStat();
        actStat.setGameId(gameId);
        actStat.setSchoolId(schoolId);
        actStat.setFacultyId(facultyId);
        List<ActStat> actStats = actStatMapper.selectActStatList(actStat);
        if(actStats != null && actStats.size()>0){
            return actStats.get(0);
        }else{
            ActStatSearchDTO actStatSearchDTO = new ActStatSearchDTO();
            actStatSearchDTO.setGameId(gameId);
            actStatSearchDTO.setSchoolId(schoolId);
            actStatSearchDTO.setFacultyId(facultyId);
            List<ActStatVO> actStatVOS = actStatMapper.selectActStatByCondition(actStatSearchDTO);
            if(actStatVOS != null && actStatVOS.size() >0){
                actStat.setRealActNum(actStatVOS.get(0).getRealActNum());
//                actStat.setStudentNum(actStatVOS.get(0).getStudentNum());
//                actStat.setTeacherNum(actStatVOS.get(0).getTeacherNum());
                actStat.setGameName(actStatVOS.get(0).getGameName());
                actStat.setFaculty(actStatVOS.get(0).getFaculty());
                actStat.setSchool(actStatVOS.get(0).getSchool());

                //计算学生和教师数量
                List<Act> acts = actMapper.select4StatList(actStatVOS.get(0));
                if(acts != null && acts.size() > 0){
                    Set<String> studentSet = new HashSet<String>();
                    Set<String> teacherSet = new HashSet<String>();

                    for(Act act :acts){
                        // 计算参赛学生数
                        String students = act.getAuthor();
                        if(StringUtils.isNotBlank(students)){
                            students = students.trim()
                                    .replace("、",",")
                                    .replace("，",",")
                                    .replace("，",",");
                            String[] studentArr = students.split(",");
                            if(studentArr != null && studentArr.length > 0){
                                for(int i = 0 ; i< studentArr.length; i++){
                                    studentSet.add(studentArr[i].trim());
                                }
                            }
                        }

                        //计算指导老师数量
                        String teachers = act.getTeacher();
                        if(StringUtils.isNotBlank(teachers) && !"无".equals(teachers)){
                            teachers = teachers.trim()
                                    .replace("、",",")
                                    .replace("，",",")
                                    .replace("，",",");
                            String[] teacherArr = teachers.split(",");
                            if(teacherArr != null && teacherArr.length > 0){
                                for(int i = 0 ; i< teacherArr.length; i++){
                                    teacherSet.add(teacherArr[i].trim());
                                }
                            }
                        }
                    }
                    actStat.setStudentNum((long) studentSet.size());
                    actStat.setTeacherNum((long) teacherSet.size());
                }
                return actStat;
            }
        }
        return null;
    }

    /**
     * 查询作品统计列表
     *
     * @param actStat 作品统计
     * @return 作品统计
     */
    @Override
    public List<ActStat> selectActStatList(ActStat actStat)
    {
        return actStatMapper.selectActStatList(actStat);
    }

    /**
     * 新增作品统计
     *
     * @param actStat 作品统计
     * @return 结果
     */
    @Override
    public int insertActStat(ActStat actStat)
    {
        actStat.setCreateTime(DateUtils.getNowDate());
        return actStatMapper.insertActStat(actStat);
    }

    /**
     * 修改作品统计
     *
     * @param actStat 作品统计
     * @return 结果
     */
    @Override
    public int updateActStat(ActStat actStat)
    {
        //查询数据库中是否存在，不存在的话新增
        ActStat searchAct = new ActStat();
        searchAct.setGameId(actStat.getGameId());
        searchAct.setSchoolId(actStat.getSchoolId());
        searchAct.setFacultyId(actStat.getFacultyId());
        List<ActStat> actStats = actStatMapper.selectActStatList(searchAct);
        if(actStats != null && actStats.size() >0){
            //存在
            actStats.get(0).setRealActNum(actStat.getRealActNum());
            actStats.get(0).setTeacherNum(actStat.getTeacherNum());
            actStats.get(0).setStudentNum(actStat.getStudentNum());
            actStats.get(0).setUpdateTime(DateUtils.getNowDate());
            actStats.get(0).setUpdateBy(actStat.getUpdateBy());
            return actStatMapper.updateActStat(actStats.get(0));
        }else{
            actStat.setCreateTime(DateUtils.getNowDate());
            return actStatMapper.insertActStat(actStat);
        }
    }

    /**
     * 批量删除作品统计
     *
     * @param ids 需要删除的作品统计主键
     * @return 结果
     */
    @Override
    public int deleteActStatByIds(String ids)
    {
        return actStatMapper.deleteActStatByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除作品统计信息
     *
     * @param id 作品统计主键
     * @return 结果
     */
    @Override
    public int deleteActStatById(Long id)
    {
        return actStatMapper.deleteActStatById(id);
    }
}
